package com.jzg.jcptadmin.Utils;

import android.os.Environment;
import android.util.Log;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

public class FileUtils {
	private String SDPATH;
	private File file;
	private int FILESIZE =1024;

	public String getSDPATH() {
		return SDPATH;
	}

	public FileUtils() {
		// 得到当前外部存储设备的目录( /SDCARD )
		SDPATH = Environment.getExternalStorageDirectory() + "/";
	}

	public FileUtils(String path) {
		// 得到当前外部存储设备的目录( /SDCARD )
		SDPATH = path;
	}

	/**
	 * 在SD卡上创建文件
	 *
	 * @param fileName
	 * @return
	 * @throws IOException
	 */
	public File createSDFile(String fileName) throws IOException {
		File file = new File(SDPATH + fileName);
		file.getParentFile().mkdirs();
		file.createNewFile();
		return file;
	}

	/**
	 * 在SD卡上创建目录
	 *
	 * @param dirName
	 * @return
	 */
	public File createSDDir(String dirName) {
		File dir = new File(SDPATH + dirName);
		dir.mkdir();
		return dir;
	}

	/**
	 * 判断SD卡上的文件夹是否存在
	 *
	 * @param fileName
	 * @return
	 */

	public boolean isFileExist(String fileName) {
		file = new File(SDPATH + fileName);
		return file.exists();
	}
	public boolean delete(){
		return file.delete();

	}

	public boolean isFileExist() {
		File file = new File(SDPATH);
		return file.exists();
	}

	/**
	 * 将一个InputStream里面的数据写入到SD卡中
	 *
	 * @param path
	 * @param fileName
	 * @param input
	 * @return
	 */
	public File write2SDFromInput(String path, String fileName,
								  InputStream input) {
		File file = null;
		OutputStream output = null;
		try {
			// createSDDir(path);
			file = createSDFile(fileName);
			output = new FileOutputStream(file);
			byte[] buffer = new byte[FILESIZE];
			int length;
			while ((length = (input.read(buffer))) > 0) {
				output.write(buffer, 0, length);
			}
			output.flush();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				output.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return file;
	}

	/**
	 * 复制文件到指定目录 param fromfile 源文件； toFile 目标文件 ；rewrite 目标文件是否可写
	 *
	 * **/
	public static boolean copyfile(String frompath, String topath, Boolean rewrite) {

		File fromFile = new File(frompath);
		File toFile = new File(topath);
		if (!fromFile.exists()) {
			return false;
		}
		if (!fromFile.isFile()) {
			return false;
		}
		if (!fromFile.canRead()) {
			return false;

		}

		if (!toFile.getParentFile().exists()) {

			toFile.getParentFile().mkdirs();

		}

		if (toFile.exists() && rewrite) {
			toFile.delete();
		}

		// 　当文件不存时，canWrite一直返回的都是false

		// if (!toFile.canWrite()) {

		// MessageDialog.openError(new Shell(),"错误信息","不能够写将要复制的目标文件" +
		// toFile.getPath());

		// Toast.makeText(this,"不能够写将要复制的目标文件", Toast.LENGTH_SHORT);

		// return ;

		// }

		try {

			FileInputStream fosfrom = new java.io.FileInputStream(fromFile);
			FileOutputStream fosto = new FileOutputStream(toFile);

			byte bt[] = new byte[1024 * 4];

			int c;

			while ((c = fosfrom.read(bt)) > 0) {

				fosto.write(bt, 0, c); // 将内容写到新文件当中

			}

			fosfrom.close();

			fosto.close();

		} catch (Exception ex) {

			Log.e("readfile", ex.getMessage());

		}
		if(fromFile.length()==toFile.length()){
			return true;
		}else{
			toFile.delete();
			return false;
		}
	}



	public static String getFileName(String path) {
		int index = path.lastIndexOf("/");
		return path.substring(index + 1);
	}

	/**
	 * 删除目录（文件夹）以及目录下的文件
	 *
	 * @param sPath
	 *            被删除目录的文件路径
	 * @return 目录删除成功返回true，否则返回false
	 */
	public static boolean deleteDirectory(String sPath) {
		// 如果sPath不以文件分隔符结尾，自动添加文件分隔符
		if (!sPath.endsWith(File.separator)) {
			sPath = sPath + File.separator;
		}
		File dirFile = new File(sPath);
		// 如果dir对应的文件不存在，或者不是一个目录，则退出
		if (!dirFile.exists() || !dirFile.isDirectory()) {
			return false;
		}
		boolean flag = true;
		// 删除文件夹下的所有文件(包括子目录)
		File[] files = dirFile.listFiles();
		for (int i = 0; i < files.length; i++) {
			// 删除子文件
			if (files[i].isFile()) {
				flag = deleteFile(files[i].getAbsolutePath());
				if (!flag)
					break;
			} // 删除子目录
			else {
				flag = deleteDirectory(files[i].getAbsolutePath());
				if (!flag)
					break;
			}
		}
		if (!flag)
			return false;
		// 删除当前目录
		if (dirFile.delete()) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * 删除单个文件
	 *
	 * @param sPath
	 *            被删除文件的文件名
	 * @return 单个文件删除成功返回true，否则返回false
	 */
	public static boolean deleteFile(String sPath) {
		boolean flag = false;
		File file = new File(sPath);
		// 路径为文件且不为空则进行删除
		if (file.isFile() && file.exists()) {
			file.delete();
			flag = true;
		}
		return flag;
	}

	public static List<String> scanDir4Photo(String dirPath){
		List<String> result = new ArrayList<String>();
		File dir  = new File(dirPath);
		if(dir.exists()){
			File[] files = dir.listFiles();
			for (File file : files) {
				System.out.println(file.getName());
				String filePath = file.getAbsolutePath();
				if(filePath.toLowerCase().endsWith(".jpg")){
					result.add(filePath);
				}
			}
		}
		return result;
	}
}
